﻿using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Logging;

namespace OpenAuth.WebApi
{
    public class Program
    {
        /// <summary>
        /// Main方法里面的内容主要是用来配置和运行程序的.
        /// 因为我们的web程序需要一个宿主, 所以 CreateWebHostBulider这个方法就创建了一个WebHostBuilder. 而且我们还需要Web Server.
        /// Build()完之后返回一个实现了IWebHost接口的实例(WebHostBuilder), 然后调用Run()就会运行Web程序, 并且阻止这个调用的线程, 直到程序关闭.
        /// </summary>
        /// <param name="args"></param>
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            //表达式方法 使用=> 为c#6新增语法糖 Expression Bodied function
            //创建默认WebHost生成器，对WebHost进行默认配置，如：
            //1.将Kestrel服务器(一个跨平台服务器)作为web服务器
            //2.加载配置文件appsettings.json 和 appsettings.[Environment].json
            //3.配置控制台输出的日志记录
            //4.启动IIS集成，使Asp.Net Core 可以在IIS上托管；
            //5.其他设置
            WebHost.CreateDefaultBuilder(args)
            //添加自定义配置
            .ConfigureLogging((hostingContext, logging) =>
                {
                    logging.ClearProviders();  //去掉默认的日志
                    logging.AddFilter("System", LogLevel.Warning);//过滤掉System开头的命名空间下的组件产生的警告级别以下的日志
                    logging.AddFilter("Microsoft", LogLevel.Warning);//过滤掉microsoft开头的命名空间下的组件产生的警告级别以下的日志
                    logging.AddLog4Net();
                })
            //修改启动url,修改后需要在游览器手动输入访问地址，即：https://localhost:52789
                .UseUrls("http://*:52789")
            //指定Startup类用于配置服务和请求管道等
                .UseStartup<Startup>();
    }
}

//这个Program是程序的入口, 看起来很眼熟, 是因为asp.net core application实际就是控制台程序(console application).
//它是一个调用asp.net core 相关库的console application.

//表达式方法示例 
//class Program
//{
//    static void Main(string[] args)
//    {
//        Console.WriteLine(GetTime());
//    }
//    public static string GetTime()
//    {
//        return "Current Time - " + DateTime.Now.ToString("hh:mm:ss");
//    }
//}
//等价于
//class Program
//{
//    static void Main(string[] args)
//    {
//        Console.WriteLine(GetTime());
//    }
//    public static string GetTime() => "Current Time - " + DateTime.Now.ToString("hh:mm:ss");
//}
